import { tempPath, setTempPath, isActivated, setActivated } from "../tempPath";
import path from "path";
import * as vscode from "vscode";
import { CreateStatusBar } from "@ap/init";
import { CommandId } from "@ap/command";
import { read, ReadMode } from "../fs";
import { BASE_CFG_JSON } from "../packageJson";
import { buildMsg } from "@ap/tools/compile";
/**
 * 异步获取文件路径。
 *
 * 根据传入的名称，返回一个临时路径或工作区路径。如果没有传入名称，则直接返回路径；
 * 如果传入了名称，则返回包含名称的路径。
 *
 * @param name 可选参数，用于指定要获取的文件或目录的名称。
 * @returns 返回一个Promise，解析为字符串类型的文件路径或undefined。
 */
export default function getFilePath(name?: string): string | undefined {
  // 检查是否存在临时路径
  if (tempPath && tempPath.length > 1) {
    // 如果没有传入名称，直接返回临时路径
    if (!name) {
      return tempPath;
    } else {
      // 如果传入了名称，返回临时路径与名称拼接的结果
      return path.join(tempPath, name);
    }
  } else {
    const workspaceFolders = vscode.workspace.workspaceFolders;
    if (workspaceFolders?.length === 1) {
      setTempPath(workspaceFolders[0].uri.fsPath);
      setActivated(true);
      return workspaceFolders[0].uri.fsPath;
    } else {
      setTempPath(undefined);
      return undefined;
    }
  }
}

/**
 * 设置文件路径。
 * 根据当前编辑器中的文件，确定文件所属的工作区文件夹，并据此设置临时路径。
 * 同时，更新构建工具提示文本，以反映当前所选工作区文件夹的名称。
 *
 * @param editor Visual Studio Code的文本编辑器实例。
 */
export async function setFilePath(editor: vscode.TextEditor) {
  // 获取当前编辑器中文件的URI。
  const fileUri = editor.document.uri;
  // 获取当前工作区的所有文件夹。
  const workspaceFolders = vscode.workspace.workspaceFolders;
  // 检查是否存在工作区文件夹。
  if (workspaceFolders) {
    // 遍历每个工作区文件夹。
    for (const folder of workspaceFolders) {
      // 检查当前文件是否属于当前工作区文件夹。
      if (fileUri.path.toLowerCase().includes(folder.uri.path.toLowerCase())) {
        // 设置临时路径为当前工作区文件夹的文件系统路径。
        setTempPath(folder.uri.fsPath);
        try {
          await read(path.join(folder.uri.fsPath, BASE_CFG_JSON), {
            mode: ReadMode.READ,
          });
        } catch (error) {
          CreateStatusBar.buildToolObj.hide();
          CreateStatusBar.buildHMRToolObj.hide();
          CreateStatusBar.userCenterToolObj.hide();
          setActivated(false);
          vscode.commands.executeCommand(
            "setContext",
            CommandId.ap_activated,
            false,
          );
          return;
        }
        vscode.commands.executeCommand(
          "setContext",
          CommandId.ap_activated,
          true,
        );
        // 更新构建工具提示文本，包括Arena-Ts构建图标和当前工作区文件夹的名称。
        if (CreateStatusBar.buildToolObj.tooltip !== buildMsg) {
          CreateStatusBar.buildToolObj.text =
            "$(arena-up-icon) 完整构建项目（" + folder.name + "）";
        }
        CreateStatusBar.buildToolObj.show();
        CreateStatusBar.buildHMRToolObj.show();
        CreateStatusBar.userCenterToolObj.show();
        setActivated(true);
        // 找到对应的工作区文件夹后，中断循环。
        break;
      }
    }
  }
}
